package zhongbo.java.fast.order.service;

import zhongbo.java.fast.order.exception.BusinessException;
import zhongbo.java.fast.order.model.Item;
import zhongbo.java.fast.order.model.Order;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 订单服务接口
 */
public interface IOrderService {

    /**
     * 创建订单（带时间模拟参数）
     *
     * @param items 商品列表
     * @param isVIP 是否VIP用户
     */
    Order createOrder(List<Item> items, boolean isVIP);

    /**
     * 取消订单（带时间模拟参数）
     *
     * @param orderId 订单ID
     */
    void cancelOrder(String orderId);

    /**
     * 创建订单（带时间模拟参数）
     *
     * @param items       商品列表
     * @param isVIP       是否VIP用户
     * @param currentTime 模拟当前时间（用于测试时间敏感规则）
     */
    Order createOrder(List<Item> items, boolean isVIP, LocalDateTime currentTime)
            throws BusinessException;

    /**
     * 取消订单（带时间模拟参数）
     *
     * @param orderId     订单ID
     * @param currentTime 模拟当前时间（用于计算超时）
     */
    void cancelOrder(String orderId, LocalDateTime currentTime)
            throws BusinessException;
}